import Mock from 'mockjs'

// 通过环境变量来控制是否启用mock
if (import.meta.env.VITE_USE_MOCK === 'true') {
  // 模拟生成table数据
  Mock.mock('/api/table', 'get', {
    code: 1,
    msg: '请求成功',
    'data|10': [
      {
        'id|+1': 1,
        name: '@cname',
        'age|18-60': 1,
        address: '@county(true)', // @county(true) 生成一个地址
      },
    ],
  })

  // 模拟生成count数据
  Mock.mock('/api/count', 'get', {
    code: 1,
    msg: '请求成功',
    data: [
      {
        name: '今日支付订单',
        value: 1234,
        icon: 'SuccessFilled',
        color: '#2ec7c9',
      },
      {
        name: '今日收藏订单',
        value: 210,
        icon: 'StarFilled',
        color: '#ffb980',
      },
      {
        name: '今日未支付订单',
        value: 1234,
        icon: 'GoodsFilled',
        color: '#5ab1ef',
      },
      {
        name: '本月支付订单',
        value: 1234,
        icon: 'SuccessFilled',
        color: '#2ec7c9',
      },
      {
        name: '本月收藏订单',
        value: 210,
        icon: 'StarFilled',
        color: '#ffb980',
      },
      {
        name: '本月未支付订单',
        value: 1234,
        icon: 'GoodsFilled',
        color: '#5ab1ef',
      },
    ],
  })

  // 模拟生成chart数据
  Mock.mock('/api/chart', 'get', {
    code: 1,
    msg: '请求成功',
    data: {
      orderData: {
        date: [
          '2019-10-01',
          '2019-10-02',
          '2019-10-03',
          '2019-10-04',
          '2019-10-05',
          '2019-10-06',
          '2019-10-07',
        ],
        data: [
          {
            苹果: 3839,
            小米: 1423,
            华为: 4965,
            oppo: 3334,
            vivo: 2820,
            一加: 4751,
          },
          {
            苹果: 3560,
            小米: 2099,
            华为: 3192,
            oppo: 4210,
            vivo: 1283,
            一加: 1613,
          },
          {
            苹果: 1864,
            小米: 4598,
            华为: 4202,
            oppo: 4377,
            vivo: 4123,
            一加: 4750,
          },
          {
            苹果: 2634,
            小米: 1458,
            华为: 4155,
            oppo: 2847,
            vivo: 2551,
            一加: 1733,
          },
          {
            苹果: 3622,
            小米: 3990,
            华为: 2860,
            oppo: 3870,
            vivo: 1852,
            一加: 1712,
          },
          {
            苹果: 2004,
            小米: 1864,
            华为: 1395,
            oppo: 1315,
            vivo: 4051,
            一加: 2293,
          },
          {
            苹果: 3797,
            小米: 3936,
            华为: 3642,
            oppo: 4408,
            vivo: 3374,
            一加: 3874,
          },
        ],
      },
      videoData: [
        { name: '小米', value: 2999 },
        { name: '苹果', value: 5999 },
        { name: 'vivo', value: 1500 },
        { name: 'oppo', value: 1999 },
        { name: '魅族', value: 2200 },
        { name: '三星', value: 4500 },
      ],
      userData: [
        { date: '周一', new: 5, active: 200 },
        { date: '周二', new: 10, active: 500 },
        { date: '周三', new: 12, active: 550 },
        { date: '周四', new: 60, active: 800 },
        { date: '周五', new: 65, active: 550 },
        { date: '周六', new: 53, active: 770 },
        { date: '周日', new: 33, active: 170 },
      ],
    },
  })

  // 模拟生成user数据
  // 生成虚拟的用户数据，放外面避免每次请求都重新生产数据
  const userlist = Mock.mock({
    'list|200': [
      {
        'id|+1': 1,
        name: '@cname',
        'age|18-60': 1,
        'sex|1': ['1', '0'],
        address: '@county(true)',
        birth: '@date("yyyy-MM-dd")',
      },
    ],
  })
  let list = userlist.list

  // 分页获取用户数据
  Mock.mock(/\/api\/user/, 'get', function (options) {
    // 获取请求参数中的page和limit和keyword
    const urlParams = new URLSearchParams(options.url.split('?')[1])
    const currentPage = urlParams.get('currentPage')
    const pageSize = urlParams.get('pageSize')
    const keyword = urlParams.get('keyword')

    // 如果有keyword，则过滤数据
    if (keyword) {
      list = list.filter(item => item.name.includes(keyword))
    }

    return {
      code: 1,
      msg: '请求成功',
      data: {
        total: list.length,
        list: list.slice((currentPage - 1) * pageSize, currentPage * pageSize),
      },
    }
  })

  // 删除用户数据
  Mock.mock(/\/api\/user/, 'delete', function (options) {
    if (options.body) {
      // 获取请求参数中的id
      const { id } = JSON.parse(options.body)
      // 删除对应id的数据
      list = list.filter(item => item.id !== id)
    }

    return {
      code: 1,
      msg: '删除成功',
      data: null,
    }
  })

  // 新增用户
  Mock.mock(/\/api\/user/, 'post', function (options) {
    if (options.body) {
      // 获取请求参数中的id
      const { name, age, sex, address, birth } = JSON.parse(options.body)
      // 添加数据到list中
      list.push({
        id: list.length + 1,
        name,
        age,
        sex,
        address,
        birth,
      })
      return {
        code: 1,
        msg: '新增用户成功',
        data: null,
      }
    } else {
      return {
        code: 0,
        msg: '新增用户失败，获取参数失败',
        data: null,
      }
    }
  })

  // 编辑用户
  Mock.mock(/\/api\/user/, 'patch', function (options) {
    if (options.body) {
      // 获取请求参数中的id
      const { id, name, age, sex, address, birth } = JSON.parse(options.body)
      // 修改对应id的数据
      list.some(item => {
        if (item.id === id) {
          item.name = name
          item.age = age
          item.sex = sex
          item.address = address
          item.birth = birth
          return true
        }
        return false
      })
      return {
        code: 1,
        msg: '用户数据修改成功',
        data: null,
      }
    } else {
      return {
        code: 0,
        msg: '用户数据修改失败，获取参数失败',
        data: null,
      }
    }
  })
}
